package com.bruip.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * @author 王若龙
 * @CreateTime 2022-09-05 10:52
 * <p>
 * @RequestMapping 标识一个类：设置映射请求的请求路径的初始信息
 * @RequestMapping 标识一个方法：设置映射请求的请求路径的具体信息
 * </P>
 * <p>
 * 2. @RequestMapping 的value属性
 * 作用：通过请求的请求路径匹配请求
 * value属性是数组类型，即当前浏览器所发送的请求的请求路径匹配value属性中的任何一个值，
 * 则当前请求就会被注解所标识的方法进行处理
 * <p>
 * 3.@RequestMapping 的method属性
 * method属性是RequestMapping类型的数组，即当前浏览器所发送请求的请求方式匹配method属性中的任何一个值
 * 则当前请求就会被注解所标识的方法进行处理
 * 若浏览器所发送的请求的请求路径和 @RequestMapping 注解的value属性匹配，但是请求方式不匹配，此时页面报错:
 * 405 - Request method 'XXX' not supported
 * <p>
 * 在@RequestMapping的基础上，结合请求方式的一些派生注解
 * @PostMapping @GetMapping @DeleteMapping @PutMapping
 * <p>
 * 4.@RequestMapping 注解的 params属性
 * 作用：通过请求的请求参数匹配请求，即浏览器方式的请求的请求参数必须满足params的属性的设置
 * params可以使用四种表达式
 * "param":要求请求映射所匹配的请求必须携带param请求参数
 * "!param"：要求请求映射所匹配的请求必须不能携带param请求参数
 * "param=value"：要求请求映射所匹配的请求必须携带param请求参数且param=value
 * "param!=value"：要求请求映射所匹配的请求可以不携带param，若携带则param!=value
 *
 * 5.@RequestMapping 注解的 params属性
 * headers属性用法同上
 *
 * 6.@RequestMapping支持ant风格的路径
 * 在@RequestMapping的value属性中设置一些特殊字符
 * ？：表示任意的单个字符
 * *：表示任意的0个或多个字符
 * **：表示任意层数的任意目录
 * 注意：在使用**时，只能使用 / * * /xxx 的方式，**的前后不能有其他任何的字符
 */
@Controller
//@RequestMapping("/test")
public class TestRequestMappingController {

    /**
     * 此时控制器方法所匹配的请求路径是 /test/hello
     *
     * @return
     */
    @RequestMapping(
            value = {"/hello", "/hello1", "post"},
            method = {RequestMethod.GET, RequestMethod.POST},
            params = {"username"}
    )
    public String hello() {
        return "success";
    }


    @RequestMapping("/a?a/test/ant")
    public String test(){
        return "success";
    }

}
